啊 開始進入學習心得分享技術教學的部分了
這個部分的內容預計會有 8 篇
畢竟都要細講的就講完整一點 絕對不是要騙篇數
會盡量把好用的、可能的變化型通通帶出來
就是當學習筆記寫啦 (゚∀゚)
文章最後會提供 Demo DataBase 建立的原碼,執行後就會得到一樣的資料庫了
首先先回憶一下上一篇的 Node
表示方法 --> ()
假設我們現在要找資料庫裡的所有 Node
那會寫成這樣
MATCH ()
在你取得所有資料後,讓他回傳給你是理所當然的
不過你需要先幫他命個名,讓他知道你要他回傳什麼,我們就叫他 n
吧
MATCH (n)
RETURN n
這樣基本式就完成了,像是這樣 ↓↓↓↓↓
那假設我們來找出所有包含 Label
為 " SQL " 的節點吧
這樣就用用到上一篇提過的表達 Label
的方法
MATCH (n:SQL)
RETURN n
再限制更多的條件吧
來找出 Label
為 " SQL " 且 Property
欄位 " Name " 為 " SQL Server " 的資料吧
MATCH (n:SQL{Name:"SQL Server"})
RETURN n
這樣最基本的表示方式就完成了
後面關於 Label
跟 Property
的部分就自行運用了
小提示:如果有兩個以上的 Label
可以表示成這樣 --> (:NoSQL:Neo4j)
來查一條關係吧,假設我們要查出資料庫的類型
MATCH p=({Name:"資料庫"})-[:Type]-()
RETURN *
稍微解釋一下 p=
跟 RETURN *
p=
MATCH
命名,寫法就是 (name)=...
,這邊範例為 p
RETURN *
有命名
的資料,用法就是 RETURN *
如果你沒命名就不會回傳,例如:下圖
你可以看到當我只命名有連結到的點時,他就會只回傳連結到的點MATCH ({Name:"資料庫"})-[:Type]-(n) RETURN *
那有辦法某個限定關係
長度的資料嗎
答案是,可以,類似這樣
MATCH p=()-[*..2]-(:File)
RETURN *
這邊使用了 *..2
指中間關聯數最多 2 條的意思
你可以看到離藍色點最遠不超過兩個關係
同理,如果寫成
*2..4
就是指中間關聯數為 2 到 4 條的意思
當然我們也可以取得與某個 Node
有關係的所有 Node
例:取得跟 " 非關聯式資料庫 " 有關的所有 Node
MATCH p=({Name:"非關聯式資料庫"})--() RETURN *
如果在 MATCH
的時候沒有匹配的資料呢
正常的情況,回什麼都沒回給你,像是這樣
這是原始資料
你可以發現 Neo4j
這個點並沒有任何對外關係
這時候如果搜尋 Neo4j
對外的點,我們會得到這樣
MATCH p=({Name:"Neo4j"})-->() RETURN *
你可以看到 Response
的值是空的
這時如果加上 OPTIONAL
,結果會變成這樣
OPTIONAL MATCH p=({Name:"Neo4j"})-->() RETURN *
你可以看到他幫你把回傳值補上 null
了
是的,OPTIONAL
會自動把空的資料代換成 null
目前本人在實務上還沒遇到需要用到這個關鍵字的時候
如果之後有遇到再跟大家分享 |>
為什麼一個 MATCH
可以講這麼長阿 (((゚Д゚;)))
預計打一個小時的,打了一小時 50 分
不要鬧了,時間要不夠啦 (゚∀。)
已經兩篇沒有 meme 圖啦,好想玩哏喔,這麼會這樣
明天 Cypher 語法簡介 Part2 : 學過 SQL 的你,似曾相似的 WHERE
期待明日的降臨吧 Ciao!
我只會貼一次
Create (db:Name{Name:'資料庫'})
Create (db)-[:Type]->(sql:SQL:Name{Name:'關聯式資料庫'})
Create (db)-[:Type]->(nosql:NoSQL:Name{Name:'非關聯式資料庫'})
Create (sql)-[:have]->(:SQL:Name{Name:'SQL Server'})
Create (sql)-[:have]->(:SQL:Name{Name:'Oracle'})
Create (sql)-[:have]->(:SQL:Name{Name:'My SQL'})
Create (nosql)-[:have]->(key:Key:NoSQL:Name{Name:'鍵值儲存資料庫'})
Create (nosql)-[:have]->(file:File:NoSQL:Name{Name:'文件儲存資料庫'})
Create (nosql)-[:have]->(time:Time:NoSQL:Name{Name:'時序型資料庫'})
Create (nosql)-[:have]->(G:G:NoSQL:Name{Name:'圖形資料庫'})
Create (G)-[:have]->(:Neo4j:G:NoSQL:Name{Name:'Neo4j'})
Create (G)-[:have]->(:G:NoSQL:Name{Name:'JanusGraph'})
Create (file)-[:have]->(:File:NoSQL:Name{Name:'CouchDB'})
Create (file)-[:have]->(:File:NoSQL:Name{Name:'MongoDB'})
Create (key)-[:have]->(:Key:NoSQL:Name{Name:'Redis'})
Create (key)-[:have]->(:Key:NoSQL:Name{Name:'Memcached'})
Create (time)-[:have]->(:Time:NoSQL:Name{Name:'Graphite'})
Create (time)-[:have]->(:Time:NoSQL:Name{Name:'InfluxDB'})
排版好看的版本同步更新在我的 HackMD